package ma.moliere.domaine;

import java.util.List;

import ma.moliere.commun.FonctionnelleException;
import ma.moliere.persistance.oe.Inscription;
import ma.moliere.persistance.oe.Rencontre;
import ma.moliere.transverse.vo.EleveAffiche;
import ma.moliere.transverse.vo.ReglementAffiche;

public interface IGestionInscriptionDomaine {

	/**
	 * Cette méthode permet d'isncrire un élève pour la première fois dans le système.
	 * 
	 * @param inscription
	 *            : Représente les données de l'insription.
	 * @param idAnneescolaire
	 *            : id de l'année scolaire.
	 * @param idClasse
	 *            : id de la classe.
	 * @param idEleve
	 *            : id de l'élève à insrire.
	 */
	Inscription enregistrerInscription(final Inscription inscription, long idAnneescolaire, long idClasse, EleveAffiche eleve)
		throws FonctionnelleException;

	/**
	 * Cette methode permet de modifier une inscription.
	 * 
	 * @param inscription
	 *            : entité à modifier
	 * @throws FonctionnelleException
	 *             : exception fonctionnelle.
	 */
	void modifier(final Inscription inscription) throws FonctionnelleException;

	List < ReglementAffiche > rechercherReglements(List < Long > ids);

	List < ReglementAffiche > rechercherReglementsParInscription(List < Long > ids);

	Long compterEleves();

	List < Inscription > rechercherInscription(List < String > matricules, long idannee);

	ReglementAffiche ajouterReglement(final ReglementAffiche reglement);

	void modifierReglement(ReglementAffiche reglement);

	void ajouterRencontre(Rencontre rencontre);

	List < Inscription > rechercherInscriptionParClasseGrpsEtAnnees(List < Long > idsClasse, List < Long > idsgrp,
		List < Long > idsAnnee);
}
